package com.cskaoyan.javase.oop3._1interface._4exercise;

/**
 * 教练（Coach）和运动员（Sportsman）案例
 * 小试牛刀请用所学知识分析：这个案例中有哪些抽象类，哪些接口，哪些具体类。
 *
 * 现在有乒乓球运动员和篮球运动员，乒乓球教练和篮球教练。
 * 为了能够出国交流，跟乒乓球相关的人员都需要学习英语。
 *
 * 抽象类: 抽象的人类,抽象的教练类,抽象的运动员类
 * 接口: 学习(英语)
 * 具体类: 乒乓球运动员和篮球运动员，乒乓球教练和篮球教练 所对应类
 *
 * @since 11:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        ILearning il = new TableTennisSportsman();
        il.learningEnglish();
        BaseSportsman bs = new TableTennisSportsman();
        bs.play();
        bs.training();
        BasePerson bp = new TableTennisSportsman();
        bp.eat();
        bp.sleep();
        if (bp instanceof TableTennisSportsman){
            TableTennisSportsman tts = (TableTennisSportsman) bs;
            // 子类引用能够访问所有子类 + 父类成员
            System.out.println(tts.salary);
        }
    }
}

abstract class BasePerson {
    String name;
    int age;

    public void eat() {
        System.out.println("吃饭很重要~~");
    }

    public void sleep() {
        System.out.println("睡会很重要~~");
    }
}

abstract class BaseCoach extends BasePerson {
    double salary;
    double bonus;
    String project;

    public abstract void teach();
}

abstract class BaseSportsman extends BasePerson {
    double salary;
    double bonus;
    String project;

    public abstract void training();

    public abstract void play();
}

interface ILearning {
    void learningEnglish();
}

class BasketballCoach extends BaseCoach {
    @Override
    public void teach() {
        System.out.println("我教你⛹~~");
    }
}

class TableTennisSportsman extends BaseSportsman implements ILearning {

    @Override
    public void training() {
        System.out.println("我在训练打🏓~~");
    }

    @Override
    public void play() {
        System.out.println("我和别人比赛打乒乓球,我每次都是第一~~");
    }

    @Override
    public void learningEnglish() {
        System.out.println("我在学习英语,为了学习Java~~");
    }
}